\documentclass[a4paper]{article} 

\usepackage{listings}
\lstset{tabsize=4, %
	frame=shadowbox, %把代码用带有阴影的框圈起来
	commentstyle=\color{red!50!green!50!blue!50},%浅灰色的注释
	rulesepcolor=\color{red!20!green!20!blue!20},%代码块边框为淡青色
	keywordstyle=\color{blue!90}\bfseries, %代码关键字的颜色为蓝色，粗体
	showstringspaces=false,%不显示代码字符串中间的空格标记
	stringstyle=\ttfamily, % 代码字符串的特殊格式
	keepspaces=true, %
	breakindent=22pt, %
	numbers=left,%左侧显示行号
	stepnumber=1,%
	numberstyle=\tiny, %行号字体用小号
	basicstyle=\footnotesize, %
	showspaces=false, %
	flexiblecolumns=true, %
	breaklines=true, %对过长的代码自动换行
	breakautoindent=true,%
	breakindent=4em, %
	%escapebegin=\begin{CJK*}{GBK}{hei},escapeend=\end{CJK*},
	aboveskip=1em, %代码块边框
	fontadjust,
	captionpos=t,
	framextopmargin=2pt,framexbottommargin=2pt,abovecaptionskip=-3pt,belowcaptionskip=3pt,
	xleftmargin=4em,xrightmargin=4em, % 设定listing左右的空白
	texcl=true,
	% 设定中文冲突，断行，列模式，数学环境输入，listing数字的样式
	extendedchars=false,columns=flexible,mathescape=true
	% numbersep=-1em
}
\usepackage{cite}
\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage{extarrows}
\usepackage{ctex}
\usepackage{amsfonts,amssymb} 
\usepackage{amsmath} 
\usepackage{cases}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{framed}
\usepackage{float}
\usepackage{ulem}
\usepackage{booktabs}
\usepackage{amsthm}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}
\geometry{a4paper,left=3cm,right=3cm,top=3cm,bottom=3cm}

\begin{document}
	\begin{center}
		{\heiti {\huge 第四章编程作业}}
	\end{center}
	
	\begin{center}
		{\large 求数2101\ 叶陈昊\ 3210106359}
	\end{center}

	\section{ProblemA}

	在区间$[0.99,1.01]$的101个等间距点上打印出$f(x),g(x)$以及$h(x)$的值，
	以坐标形式分别存储在\texttt{f\_data.txt}，\texttt{g\_data.txt}，
	\texttt{h\_data.txt}中，并将这些函数在$[0.99,1.01]$上的图像画出，如下图所示.
	
	

	\begin{center}
		\begin{tikzpicture}
			\begin{axis}[
				title={ProblemA},
				legend pos=outer north east,
				xlabel=$x$,
				xticklabel style={/pgf/number format/.cd, precision=3, fixed},
				ylabel={$y$},
				]
				
				%作图f(x)-绿色
				\addplot[green, mark=none] table {f_data.txt};
				\addlegendentry{$f(x)$}
				
				%作图g(x)-红色
				\addplot[red, mark=none] table {g_data.txt};
				\addlegendentry{$g(x)$}
				
				%作图h(x)-橙色
				\addplot[orange, mark=none] table {h_data.txt};
				\addlegendentry{$h(x)$}
				
				
			\end{axis}
		\end{tikzpicture}
	\end{center}
	
	从图像上看，很明显，$f(x)$和$g(x)$相比于$h(x)$而言振荡剧烈，可以认为
	$h(x)$所给出的图像是最准确的.从每个函数在计算机内计算的过程来看，
	$f(x)$和$g(x)$要做很多的乘法、加法运算，累积起来会带来一定的舍入误差；
	而$h(x)$只需要做少量乘法（如先算$a:=(x-1)*(x-1)$，再算$b=a*a$，最后算
	$b*b$就能得到$h(x)$的值），舍入误差相对较小，因此结果较为精确.
	
	\section{ProblemB}
	\subsection{UFL($\mathbb{F}$)和OFL($\mathbb{F}$)的计算}
	\begin{center}
		UFL($\mathbb{F}$)$=\beta^L=2^{-1}=(1.00)_2\times2^{-1}=0.5;$\\
		OFL($\mathbb{F}$)$=\beta^U(\beta-\beta^{1-p})
		=2^1(2-2^{1-3})=(1.11)_2\times 2^1=3.5.$
	\end{center}

	\subsection{枚举规格化浮点数，并验证其个数}
	在\texttt{ProblemB.cpp}中，输出了规格化浮点数，整理如下：
	\begin{center}
		$-3.5,-3,-2.5,-2,-1.75,-1.5,-1.25,-1,-0.875,-0.75,-0.625,-0.5,0$\\
		$0.5,0.625,0.75,0.875,1,1.25,1.5,1.75,2,2.5,3,3.5.$
	\end{center}
	由上，我们得到$\#\mathbb{F}=25.$
	
	另一方面，由讲义推论4.19，$\mathbb{F}$的个数为
	$\#\mathbb{F}=2^p(U-L+1)+1=2^3(1-(-1)+1)+1=25.$
	从而此例验证了该推论.

	\subsection{作图：规格化浮点数系统}
	
	\begin{center}
		\begin{tikzpicture}  
			% 绘制实轴  
			\draw[->] (-7.6,0) -- (7.6,0) node[right] {$x$};  
			% 标记点 -3 到 3  
			\foreach \x in {-3,-2,-1,0,1,2,3}  
			\draw (\x *2,0) node[circle,fill,inner sep=1.5pt,label=below:$\x$] {}; 
			% 标记规范化
			\node[red,scale=1.5] at (0,0) {+};
			\foreach \x in {1,1.25,1.5,1.75}
			{
				\node[red,scale=1.5] at (\x *2,0) {+};  
				\node[red,scale=1.5] at (\x * 4,0) {+}; 
				\node[red,scale=1.5] at (\x ,0) {+};
				\node[red,scale=1.5] at (-\x *2,0) {+};  
				\node[red,scale=1.5] at (-\x * 4,0) {+}; 
				\node[red,scale=1.5] at (-\x ,0) {+};
			}
		\end{tikzpicture}
		
	\end{center}

	其中，红色的加号所标记的位置即为一个规格化浮点数的位置.
	
	\subsection{枚举欠规格化浮点数}
	在\texttt{ProblemB.cpp}中，输出了欠规格化浮点数，整理如下：
	\begin{center}
		$-0.375,-0.25,-0.125,0.125,0.25,0.375.$
	\end{center}
	
	\subsection{作图：拓展浮点数系统}
	
	\begin{center}
		\begin{tikzpicture}  
			% 绘制实轴  
			\draw[->] (-7.6,0) -- (7.6,0) node[right] {$x$};  
			% 标记点 -3 到 3  
			\foreach \x in {-3,-2,-1,0,1,2,3}  
			\draw (\x *2,0) node[circle,fill,inner sep=1.5pt,label=below:$\x$] {}; 
			% 标记规范化
			\node[red,scale=1.5] at (0,0) {+};
			\foreach \x in {1,1.25,1.5,1.75}
			{
				\node[red,scale=1.5] at (\x *2,0) {+};  
				\node[red,scale=1.5] at (\x * 4,0) {+}; 
				\node[red,scale=1.5] at (\x ,0) {+};
				\node[red,scale=1.5] at (-\x *2,0) {+};  
				\node[red,scale=1.5] at (-\x * 4,0) {+}; 
				\node[red,scale=1.5] at (-\x ,0) {+};
			}
%			\foreach \x in {2,2.5,3,3.5}
%			\node[red,scale=1.5] at (\x,0) {+}; 
%			\foreach \x in {0.5,0.625,0.75,0.875}
%			\node[red,scale=1.5] at (\x,0) {+};   
			% 标记非规范化
			\foreach \x in {0.25,0.5,0.75}
			{
				\node[blue] at (\x,0) {+};  
				\node[blue] at (-\x,0) {+};  
			}
		\end{tikzpicture}
		
	\end{center}
	
	其中，补充的蓝色小加号所标记的位置即为一个欠规格化浮点数的位置.

%	\section{附录：理论作业IX题图}
%		\begin{center}
%		\begin{tikzpicture}
%			\begin{axis}[
%				%				title={ProblemA},
%				legend pos= north east,
%				xlabel=$x$,
%				ylabel={$y$},
%				]
%				
%				%作图f(x)-绿色
%				\addplot [
%				domain=0.005:1, 
%				samples=200, 
%				color=green,
%				]
%				{x/(exp(x)-1)};
%				\addlegendentry{cond$_f(x)$}
%				
%				
%				
%				
%			\end{axis}
%		\end{tikzpicture}		
%		\begin{tikzpicture}
%			\begin{axis}[
%				%				title={ProblemA},
%				legend pos=north east,
%				xlabel=$x$,
%				ylabel={$y$},
%				]
%				%作图g(x)-红色
%				\addplot [
%				domain=0:1, 
%				samples=200, 
%				color=red,
%				]
%				{exp(x)/x};
%				\addlegendentry{cond$_A(x)$上界估计函数}
%			\end{axis}
%		\end{tikzpicture}
%	\end{center}
%	
\end{document}